# -*- coding: utf-8 -*-
"""
@Time    : 2024/7/24 10:36 
@Author  : ZhangShenao 
@File    : 1.使用CharacterTextSplitter字符文本分割器.py 
@Desc    : 使用CharacterTextSplitter字符文本分割器

使用CharacterTextSplitter字符文本分割器
可以基于特定的字符,将文本进行分割

CharacterTextSplitter的实现是:先按照分割符分割整个文档,然后分块列表,将每个分块依次合并,直到最接近chunk_size窗口大小时则完成一个Document的组装
但是如果基于分割符号得到的文本,本身长度已经超过了chunk_size,则会直接进行警告,并且将对应的文本单独变成一个块
因此,会出现某个chunk的长度远大于或远小于chunk_size的情况

"""
from langchain_community.document_loaders import UnstructuredMarkdownLoader
from langchain_text_splitters import CharacterTextSplitter

# 创建Markdown文档加载器
loader = UnstructuredMarkdownLoader('./docs/项目API资料.md')

# 加载文档列表
docs = loader.load()

# 创建CharacterTextSplitter字符文本分割器
splitter = CharacterTextSplitter(
    separator='\n\n',  # 指定分割符
    chunk_size=500,  # 指定每个文本块的大小
    chunk_overlap=50,  # 指定每个文本块之间的重叠大小
    add_start_index=True,  # 添加起始索引
)

# 将文档分割成多个文档块Chunk
chunks = splitter.split_documents(docs)

# 打印每个分块的信息
for chunk in chunks:
    print(f'文档块大小: {len(chunk.page_content)}, 文档块元数据: {chunk.metadata}')
